مجوزهای معمولی لینوکس (مالک، گروه، دیگران) مثل سه تا کلید برای یک درب هستند. اما ACL به شما اجازه میدهد برای هر کاربر یا گروه خاصی یک کلید جداگانه بسازید. مثلاً میتوانید به کاربر «احمد» اجازه خواندن بدهید، به کاربر «سارا» اجازه نوشتن، و به بقیه هیچ دسترسی ندهید.
ACL مخفف Access Control List (لیست کنترل دسترسی) است. این یک سیستم مجوزدهی پیشرفته است که به شما امکان میدهد فراتر از مجوزهای معمولی (مالک، گروه، دیگران)، برای کاربران و گروههای خاص بهطور جداگانه دسترسی تعیین کنید.[reference:0][reference:1]
با استفاده از ACL میتوانید:
برای استفاده از ACL، باید بسته acl روی سیستم شما نصب باشد. همچنین سیستم فایل شما باید از ACL پشتیبانی کند (ext3، ext4، xfs و ...).[reference:4]
getfacl (مشاهده ACL)setfaclsetfacl (تنظیم ACL)getfacl (مشاهده ACL)توضیح:
# file: file.txt → نام فایل# owner: ya3in → مالک فایل# group: ya3in → گروه فایلuser::rw- → مجوزهای مالک (rw-)group::r-- → مجوزهای گروه (r--)other::r-- → مجوزهای دیگران (r--)getfacl| گزینه | توضیح |
|---|---|
-c |
نمایش فقط مجوزها (بدون هدر)[reference:5] |
-n |
نمایش UID و GID به جای نام کاربر[reference:6] |
-R |
نمایش بازگشتی برای همه فایلهای زیردایرکتوریها[reference:7] |
-t |
نمایش به صورت جدولی[reference:8] |
وقتی یک فایل دارای ACL باشد، در خروجی ls -l یک علامت + (plus) در انتهای مجوزها نمایش داده میشود.[reference:9]
setfacl (تنظیم ACL)قوانین ACL به این صورت نوشته میشوند:[reference:10]
u:username:permissions → برای یک کاربر خاصg:groupname:permissions → برای یک گروه خاصm:permissions → برای ماسک (حداکثر مجوز مجاز)o:permissions → برای دیگرانd:u:username:permissions → پیشفرض برای کاربر (فقط روی دایرکتوری)setfacl| گزینه | توضیح |
|---|---|
-m |
افزودن یا تغییر یک قانون ACL (modify)[reference:11] |
-x |
حذف یک قانون ACL (remove)[reference:12] |
-b |
حذف همه قوانین ACL (به جز قوانین پایه)[reference:13] |
-k |
حذف قوانین پیشفرض (Default ACL)[reference:14] |
-R |
اعمال تغییرات بهصورت بازگشتی روی همه زیردایرکتوریها |
setfacl
توضیح: به کاربر ahmad اجازه خواندن (r) فایل file.txt داده میشود.[reference:15]
توضیح: به گروه developers اجازه خواندن و نوشتن (rw) فایل project.txt داده میشود.[reference:16]
توضیح: قانون ACL مربوط به کاربر ahmad حذف میشود.[reference:17]
توضیح: هر فایل جدیدی که در دایرکتوری shared_dir ساخته شود، بهطور خودکار برای کاربر ahmad مجوز خواندن و نوشتن خواهد داشت.[reference:18]
توضیح: ACL فایل file1.txt به فایل file2.txt کپی میشود.[reference:19][reference:20]
برای استفاده از setfacl روی فایلهایی که مالک آنها نیستید، به دسترسی root نیاز دارید.[reference:21][reference:22]
ماسک (Mask) حداکثر مجوزی را مشخص میکند که یک کاربر یا گروه غیر از مالک میتواند داشته باشد.[reference:23]
توضیح: ماسک را روی rx (خواندن و اجرا) تنظیم میکند. حتی اگر به یک کاربر rwx داده باشید، حداکثر مجوز او rx خواهد بود.
getfacl مجوزهای آن را ببینید.setfacl -m u:username:rw به یک کاربر خاص دسترسی بدهید.getfacl دوباره مجوزها را بررسی کنید.setfacl -x u:username دسترسی را حذف کنید.setfacl -m d:u:username:rw یک مجوز پیشفرض تنظیم کنید.